package com.lambdazen.bitsy.jsr223;

import com.lambdazen.bitsy.BitsyEdge;
import com.lambdazen.bitsy.BitsyElement;
import com.lambdazen.bitsy.BitsyGraph;
import com.lambdazen.bitsy.BitsyIoRegistryV3d0;
import com.lambdazen.bitsy.BitsyProperty;
import com.lambdazen.bitsy.BitsyVertex;
import com.lambdazen.bitsy.BitsyVertexProperty;
import com.lambdazen.bitsy.ThreadedBitsyGraph;
import com.lambdazen.bitsy.UUID;
import com.lambdazen.bitsy.tx.BitsyTransaction;
import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;

public class BitsyGremlinPlugin
    extends AbstractGremlinPlugin
{
  private static final String NAME = "lambdazen.bitsy";

  private static ImportCustomizer imports() {
    return DefaultImportCustomizer.build()
        .addClassImports(
            BitsyEdge.class,
            BitsyElement.class,
            BitsyGraph.class,
            ThreadedBitsyGraph.class,
            BitsyProperty.class,
            BitsyVertex.class,
            BitsyVertexProperty.class,
            UUID.class,
            BitsyTransaction.class,
            BitsyIoRegistryV3d0.class
        ).create();
  }

  private static final BitsyGremlinPlugin INSTANCE = new BitsyGremlinPlugin();

  public BitsyGremlinPlugin() {
    super(NAME, imports());
  }

  public static BitsyGremlinPlugin instance() {
    return INSTANCE;
  }
}
